// 头文件包含了函数声明，宏定义，结构体声明，变量声明。
// 比如stdio.h系统头文件包含了printf，scanf, fopen函数
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>
// 第1优先级：各种括号，如()、[]等、成员运算符 . ；
// 第2优先级：所有单目运算符，如++(自加)、--(自减)、!(非)、~(位非)等；
// 第3优先级：乘法运算符*、除法运算符/、求余运算符%；
// 第4优先级：加法运算符+、减法运算符-；
// 第5优先级：移位运算符<<、>>；
// 第6优先级：大于运算符>、大于等于运算符>=、小于运算符<、小于等于运算符<=；
// 第7优先级：等于运算符==、不等于运算符!=；
// 第8优先级：按位与运算符&；
// 第9优先级：按位异或运算符^；
// 第10优先级：按位或运算符|；
// 第11优先级：逻辑与运算符&&；
// 第12优先级：逻辑或运算符||；
// 第13优先级：三目条件运算符 ?: ；
// 第14优先级：各种赋值运算符，如=、+=、-=、*=、/= 等；
// 第15优先级：逗号运算, 。

/*
CPU执行一个加法：
c = a + b;
CPU会将内存中的a放入加法寄存器，然后将内存中的b加入加法寄存器，得到结果。再将加法寄存器的结果放回内存中的c变量里面。
*/

// int main(void)也是可以的
int main(int argc, char **argv)
{
    // ,用法
    char a = 10, b = 3, c;

    printf("[%s,%d]test + - * / operation================>\n", __FILE__, __LINE__);
    c = a + b;
    printf("[%s,%d]%d+%d=%d\n", __FILE__, __LINE__, a, b, c);
    c = a - b;
    printf("[%s,%d]%d-%d=%d\n", __FILE__, __LINE__, a, b, c);
    c = a * b;
    printf("[%s,%d]%d*%d=%d\n", __FILE__, __LINE__, a, b, c);
    c = a / b;// 取整数部分
    printf("[%s,%d]%d/%d=%d\n", __FILE__, __LINE__, a, b, c);
    c = a % b;
    printf("[%s,%d]%d%%%d=%d\n", __FILE__, __LINE__, a, b, c);

    printf("[%s,%d]test self + - * / operation================>\n", __FILE__, __LINE__);
    c = a;
    a = a + b;
    printf("[%s,%d]%d+%d=%d\n", __FILE__, __LINE__, c, b, a);
    c = a;
    a = a - b;
    printf("[%s,%d]%d-%d=%d\n", __FILE__, __LINE__, c, b, a);
    c = a;
    a = a * b;
    printf("[%s,%d]%d*%d=%d\n", __FILE__, __LINE__, c, b, a);
    c = a;
    a = a / b;
    printf("[%s,%d]%d/%d=%d\n", __FILE__, __LINE__, c, b, a);
    c = a;
    a = a % b;
    printf("[%s,%d]%d%%%d=%d\n", __FILE__, __LINE__, c, b, a);

    printf("[%s,%d]test += -= *= /= operation================>\n", __FILE__, __LINE__);
    a = 10;
    c = a;
    a += b;
    printf("[%s,%d]%d+%d=%d\n", __FILE__, __LINE__, c, b, a);
    c = a;
    a -= b;
    printf("[%s,%d]%d-%d=%d\n", __FILE__, __LINE__, c, b, a);
    c = a;
    a *= b;
    printf("[%s,%d]%d*%d=%d\n", __FILE__, __LINE__, c, b, a);
    c = a;
    a /= b;
    printf("[%s,%d]%d/%d=%d\n", __FILE__, __LINE__, c, b, a);
    c = a;
    a %= b;
    printf("[%s,%d]%d%%%d=%d\n", __FILE__, __LINE__, c, b, a);

    a = 10;
    float d = (float)a / b;
    printf("[%s,%d]float %d/%d=%f\n", __FILE__, __LINE__, a, b, d);
    return 1;

    printf("[%s,%d]1 + 10 / 3=%d\n", __FILE__, __LINE__, 1 + 10 / 3);
}
// 输出：
//  ./test a b c
//  hello world!
